Avoid flickering by using more temp unset bg
authorAlexander Larsson <alexl@redhat.com>
Thu, 18 Dec 2008 21:08:39 +0000 (22:08 +0100)
committerAlexander Larsson <alex@localhost.localdomain>
Thu, 2 Apr 2009 08:15:17 +0000 (10:15 +0200)
gdk/x11/gdkwindow-x11.c

index d893364d200ab92c3b4dd29e178d7b61d34fa252..272b44763b5726d4fc94fbb51845fd87faf7aee0 100644 (file)
@@ -1308,10 +1308,7 @@ gdk_window_x11_show (GdkWindow *window)
   XMapWindow (xdisplay, xwindow);
   
   if (unset_bg)
-    {
-      _gdk_x11_window_tmp_reset_bg (window, TRUE);
-      gdk_window_invalidate_rect (window, NULL, TRUE);
-    }
+    _gdk_x11_window_tmp_reset_bg (window, TRUE);
 }
 
 static void
@@ -1576,15 +1573,19 @@ gdk_window_x11_reparent (GdkWindow *window,
   parent_private = (GdkWindowObject*) new_parent;
   impl = GDK_WINDOW_IMPL_X11 (window_private->impl);
 
+  _gdk_x11_window_tmp_unset_bg (window, TRUE);
+  _gdk_x11_window_tmp_unset_bg ((GdkWindow *)old_parent_private, FALSE);
   XReparentWindow (GDK_WINDOW_XDISPLAY (window),
                   GDK_WINDOW_XID (window),
                   GDK_WINDOW_XID (new_parent),
-                  window_private->abs_x + x, window_private->abs_y + y);
+                  parent_private->abs_x + x, parent_private->abs_y + y);
+  _gdk_x11_window_tmp_reset_bg ((GdkWindow *)old_parent_private, FALSE);
+  _gdk_x11_window_tmp_reset_bg (window, TRUE);
 
   if (GDK_WINDOW_TYPE (new_parent) == GDK_WINDOW_FOREIGN)
     new_parent = gdk_screen_get_root_window (GDK_WINDOW_SCREEN (window));
 
-  window_private->parent = (GdkWindowObject *)new_parent;
+  window_private->parent = parent_private;
 
   /* Switch the window type as appropriate */